|
|
Christopher James Huff <cja### [at] earthlinknet> wrote:
> POV is not entirely without these techniques: I think the bicubic patch
> primitive does have an adaptive subdivision feature that can reduce
> memory usage at the expense of render time. This is nowhere close to
> general mesh subdivision though.
I know next to nothing about NURBS surfaces, but as far as I understand,
they are kind of extended bicubic patches (ie. they have everything
bicubic patches have plus lots of extra control parameters to tune the
surface shape). Bicubic patches are extremely versatile, but they have
their limits, which AFAIK NURBS don't have (or at least they have less
limits).
The idea of NURBS surfaces is rather brilliant, since they have the
same advantages as bicubic patches (low memory requirements, very easy
to tesselate, but you can render them without pre-tesselation if
necessary) and I think you can represent virtually any surface with them.
I suppose that if you model your huge scene using NURBS surfaces, you
could have details equivalent to virtually hundreds of millions of triangles
without needing to actually allocate memory for all those triangles.
(Of course NURBS surfaces are easier to modify: Change one control point
and the surface around it will adapt smoothly.)
As for real triangle mesh raytracing, I think it's rather trivial to
come up with some kind of caching algorithm so that you don't need to keep
all the triangles in memory at the same time.
For instance, as POV-Ray creates an octree from the mesh, POV-Ray could
build this octree at parse time but not actually load the triangles into
memory (but eg. store them into a binary file). When triangles inside a
given octree node are needed for ray-triangle intersection test, they are
loaded into memory. A certain amount of nodes could be kept in memory,
and as new nodes are loaded, the oldest ones are freed.
This will, of course, have some impact in rendering speed, but at least
you are *able* to render meshes with thousands of millions of triangles
(and probably without it taking weeks).
(There are extreme cases where rendering this way might be even faster:
If only a minimal part of the whole mesh is needed, the unneeded parts
are never loaded into memory.)
--
#macro N(D)#if(D>99)cylinder{M()#local D=div(D,104);M().5,2pigment{rgb M()}}
N(D)#end#end#macro M()<mod(D,13)-6mod(div(D,13)8)-3,10>#end blob{
N(11117333955)N(4254934330)N(3900569407)N(7382340)N(3358)N(970)}// - Warp -
Post a reply to this message
|
|